﻿@* Supprimez cette section si vous utilisez le regroupement *@
@section Scripts {
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
}
@{
    Layout = "~/_SiteLayout.cshtml";
    Page.Title = "S’inscrire";

    // Initialiser les variables de la page générale
    var login = "";
    var email = "";
    var password = "";
    var confirmPassword = "";

    // Validation de l’installation
    Validation.RequireField("login", "You have to specify a login.");
    Validation.RequireField("email", "You have to specify an email.");
    Validation.RequireField("password", "The password can't be empty.");
    Validation.Add("confirmPassword",
        Validator.EqualsTo("password", "The password and the confirmation password are different."));
    Validation.Add("password",
        Validator.StringLength(
            maxLength: Int32.MaxValue,
            minLength: 6,
            errorMessage: "Le mot de passe doit inclure au moins six caractères"));

    // S’il s’agit d’une demande POST , valider et traiter les données
    if (IsPost)
    {
        AntiForgery.Validate();
        login = Request.Form["login"];
        email = Request.Form["email"];
        password = Request.Form["password"];
        confirmPassword = Request.Form["confirmPassword"];

        // Si toutes les informations sont valides, créer un compte
        if (Validation.IsValid())
        {
            // Insérer un nouvel utilisateur dans la base de données
            var dbcontext = new alguillet_ExpenseManagerEntities();
            bool check_mail_exists = (dbcontext.Members.Where(user => user.Email == email).Count() > 0);

            if (!check_mail_exists)
            {
                bool check_username_exists = (dbcontext.Members.Where(user => user.Login == login).Count() > 0);
                if (!check_username_exists)
                {
                    var members = dbcontext.Members;
                    Member mber = new Member();
                    mber.Email = email;
                    mber.Login = login;


                    members.Add(mber);
                    var success = dbcontext.SaveChanges();

                    if (success >= 1)
                    {
                        // Revenir à la page d’accueil et quitter
                        WebSecurity.CreateAccount(login, password, false);
                        WebSecurity.Login(email, password);
                        Response.Redirect("~/");
                    }
                    else
                    {
                        ModelState.AddFormError("Une erreur est survenue.");
                    }
                }
                else
                {
                    // L’utilisateur existe déjà
                    ModelState.AddFormError("Cet identifiant est déjà utilisé");
                }
            }
            else
            {
                // L’utilisateur existe déjà
                ModelState.AddFormError("L'adresse mail est déjà utilisée");
            }
        }
    }
}
<hgroup class="title">
    <h1>@Page.Title.</h1>
    <h2>Créer un compte.</h2>
</hgroup>
<form method="post">
@AntiForgery.GetHtml()
@* S’il existe au moins une erreur de validation, en avertir l’utilisateur *@
@Html.ValidationSummary("Échec de la création du compte. Corrigez les erreurs et réessayez.", excludeFieldErrors: true, htmlAttributes: null)
<fieldset>
    <legend>Inscription</legend>
    <ol>
        <li class="login">
            <label for="login" @if (!ModelState.IsValidField("login"))
                               {<text>class="error-label"</text>}>
                Username</label>
            <input type="text" id="login" name="login" value="@login" @Validation.For("login") />
            @* Écrire les erreurs de validation de l'identifiant *@
            @Html.ValidationMessage("login")
        </li>
        <li class="email">
            <label for="email" @if (!ModelState.IsValidField("email"))
                               {<text>class="error-label"</text>}>
                Email</label>
            <input type="text" id="email" name="email" value="@email" @Validation.For("email") />
            @* Écrire les erreurs de validation de la messagerie électronique sur la page *@
            @Html.ValidationMessage("email")
        </li>
        <li class="password">
            <label for="password" @if (!ModelState.IsValidField("password"))
                                  {<text>class="error-label"</text>}>
                Password</label>
            <input type="password" id="password" name="password" @Validation.For("password") />
            @* Écrire les erreurs de validation du mot de passe sur la page *@
            @Html.ValidationMessage("password")
        </li>
        <li class="confirm-password">
            <label for="confirmPassword" @if (!ModelState.IsValidField("confirmPassword"))
                                         {<text>class="error-label"</text>}>
                Confirm password</label>
            <input type="password" id="confirmPassword" name="confirmPassword" @Validation.For("confirmPassword") />
            @* Écrire les erreurs de validation du mot de passe sur la page *@
            @Html.ValidationMessage("confirmPassword")
        </li>
    </ol>
    <input type="submit" value="Register" />
</fieldset>
</form>
